\documentclass[UTF8]{ctexart}
\usepackage{geometry, CJKutf8}
\geometry{margin=1.5cm, vmargin={0pt,1cm}}
\setlength{\topmargin}{-1cm}
\setlength{\paperheight}{29.7cm}
\setlength{\textheight}{25.3cm}

% useful packages.
\usepackage{amsfonts}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{enumerate}
\usepackage{graphicx}
\usepackage{multicol}
\usepackage{fancyhdr}
\usepackage{layout}
\usepackage{listings}
\usepackage{float, caption}

\lstset{
    basicstyle=\ttfamily, basewidth=0.5em
}

% some common command
\newcommand{\dif}{\mathrm{d}}
\newcommand{\avg}[1]{\left\langle #1 \right\rangle}
\newcommand{\difFrac}[2]{\frac{\dif #1}{\dif #2}}
\newcommand{\pdfFrac}[2]{\frac{\partial #1}{\partial #2}}
\newcommand{\OFL}{\mathrm{OFL}}
\newcommand{\UFL}{\mathrm{UFL}}
\newcommand{\fl}{\mathrm{fl}}
\newcommand{\op}{\odot}
\newcommand{\Eabs}{E_{\mathrm{abs}}}
\newcommand{\Erel}{E_{\mathrm{rel}}}

\begin{document}

\pagestyle{fancy}
\fancyhead{}
\lhead{聂宇潇, 3220101556}
\chead{数据结构与算法第六次作业}
\rhead{Nov.11st, 2024}

\section{修改后remove函数的实现方法}

1.从根节点开始，递归地查找包含要删除元素的节点 x。
如果找到，则继续执行删除操作；
如果未找到（即节点为空），则返回 nullptr。

2.如果节点没有子节点或只有一个子节点，可以直接删除该节点。
如果节点有两个子节点，需要找到后继节点（通常是右子树中的最小节点），
将其值复制到当前节点，然后删除后继节点。

3.如果节点没有子节点（叶子节点），直接删除该节点，并将父节点的对应子节点指针设置为 nullptr。
如果节点只有一个子节点，将子节点链接到父节点，并删除当前节点。
如果节点有两个子节点，找到右子树中的最小节点（后继），将其值复制到当前节点，然后在右子树中删除该后继节点。

4.删除节点后，树可能变得不平衡。需要通过旋转操作来重新平衡树。
通过计算每个节点的平衡因子（左子树高度减去右子树高度）来确定是否需要旋转。
根据平衡因子的值，进行旋转。


\end{document}

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: t
%%% End: 
